package com.yyaccp.easybuy.controller;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yyaccp.easybuy.entity.News;
import com.yyaccp.easybuy.other.R;
import com.yyaccp.easybuy.service.INewsService;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.Serializable;
import java.util.List;

/**
 * <p>
 * 新闻资讯表 前端控制器
 * </p>
 *
 * @author john.yi@qq.com
 * @since 2022-04-20
 */
@RestController
@RequestMapping("/news")
public class NewsController {
    /**
    * 服务对象
    */
    @Resource
    private INewsService newsService;

    /**
    * 需要有news:list权限，不管什么角色
     * zs，ls都可以访问，没有@PreAuthorize注解的方法，登陆后可以访问
     *
    */
    @GetMapping
    @PreAuthorize("hasAuthority('news:list')")
    public R selectAll(Page<News> page, News news) {
        return R.ok(this.newsService.page(page, new LambdaQueryWrapper<>(news)));
    }

    /**
    * 需要有admin角色，不管什么权限
     * zs可以访问，ls不可用访问，没有@PreAuthorize注解的方法，登陆后可以访问
    */
    @PreAuthorize("hasRole('admin')")
    @GetMapping("{id}")
    public R selectOne(@PathVariable Serializable id) {
        return R.ok(this.newsService.getById(id));
    }

    /**
    * 新增数据
    *
    * @param news 实体对象
    * @return 新增结果
    */
    @PostMapping
    public R insert(@RequestBody News news) {
        return R.ok(this.newsService.save(news));
    }

    /**
    * 修改数据
    *
    * @param news 实体对象
    * @return 修改结果
    */
    @PutMapping
    public R update(@RequestBody News news) {
        return R.ok(this.newsService.updateById(news));
    }

    /**
    * 删除数据
    *
    * @param idList 主键结合
    * @return 删除结果
    */
    @DeleteMapping("{idList}")
    public R delete(@PathVariable("idList") List<Serializable> idList) {
        return R.ok(this.newsService.removeByIds(idList));
    }
}
